/**
 * FileName: UserService
 * Author: TangZaoBang
 * Date: 2023/04/29 22:39
 * Description:
 * <p>
 * History:
 * <author> TangZaoBang
 * <time> 2023/04/29 22:39
 * <version> 1.0.0
 * <desc> 版本描述
 */

package com.bosssoft.quickstart.demo.service;

import com.bosssoft.quickstart.demo.pojo.dto.IdVersion;
import com.bosssoft.quickstart.demo.pojo.dto.UserDTO;
import com.bosssoft.quickstart.demo.pojo.query.UserQuery;
import com.bosssoft.quickstart.demo.pojo.vo.CommonPage;
import org.springframework.web.bind.annotation.RequestBody;

import javax.validation.Valid;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;

/**
 * @Class UserService
 * @Description UserService
 * @Author TangZaoBang
 * @Date 2023/04/29 22:39
 * @Version
 */
public interface UserService {
    /**
     * 接收UserDTO 录入到数据库
     * @param userDTO
     * @return
     */
    Boolean add(@NotNull @Valid UserDTO userDTO);
/**
 * 通过id删除User
 * @author TangZaoBang
 * @date 2023/04/30 00:27
 * @param id user的id
 * @return java.lang.Boolean
 */
    Boolean removeUserById( @NotNull Long id);

    /**
     * findUserById 返回DTO
     * @author TangZaoBang
     * @date 2023/04/30 11:31
     * @param id 传入的id
     * @return java.lang.Boolean
     */
    UserDTO findUserById( @NotNull Long id);
/**
 * 更新用户
 * @author TangZaoBang
 * @date 2023/05/01 01:13
 * @param userDTO 传入的DTO
 * @return java.lang.Boolean
 */
    Boolean updateUser(@NotNull @Valid UserDTO userDTO);

    /**
     * 通过 id 和 version 删除User 要求id和version 都要一致
     * @author TangZaoBang
     * @date 2023/05/01 10:25
     * @param id id
     * @param version  version
     * @return java.lang.Boolean
     */
    Boolean removeUserByIdAndVersion(@NotNull  Long id, @NotNull  Long version);

    /**
     * 通过id和version批量删除
     * @author TangZaoBang
     * @date 2023/05/01 11:24
     * @param idVersions 传入的集合
     * @return java.lang.Boolean 
     */
    Boolean removeUsers(@NotEmpty IdVersion[] idVersions);

    /**
     * 界面调用接口更新用户信息
     * @param userQuery 用户信息包含 id
     * @return true成功 false失败
     */
    CommonPage<UserDTO> search(@NotNull @Valid @RequestBody UserQuery userQuery);
}
